chore: pixel render tests, esbuild bump, ESLint + Prettier - #86
Merged
Conversation
Golden snapshots stop at the DisplayList and frame.test.ts only checks "valid PNG + differs over t", so a renderer-canvas bug (broken gradient mapping, black matte composite, the fill:"none" to black backdrop regression) ships undetected. Render a real frame through Chromium, decode to raw rgb with ffmpeg, and assert semantic pixel properties over each node's region (located via sceneGeometry): the liquid-glass backdrop panel is bright and varied (guards the black-panel bug), a gradient fill varies across the shape, a group composites offscreen, and an alpha matte cuts content to its mask. Loose inequalities, so machine-independent and CI-runnable (unlike byte-exact pixel snapshots). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Clears the low-severity dev-server advisory GHSA-g7r4-m6w7-qqqr (esbuild's dev server / esbuild.serve is never used here). The direct deps in render-cli and reframe-video move to ^0.28.1; a pnpm-workspace override forces transitive esbuild (pulled in by tsx and vitest) past the patched floor as well, so `pnpm audit` reports no vulnerabilities. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ESLint: eslint:recommended + typescript-eslint recommended (not type-aware, strict tsc already covers types) + eslint-config-prettier, wired into CI after typecheck. Fixes every finding it surfaced: unused imports across example scenes and tests, an empty interface, two test `any`s, an irregular whitespace, a caught-error without a cause, and a statement-position ternary; the CLI dispatcher's process.exit cases are documented for no-fallthrough. Node globals for .mjs/scripts; generated and build-copied files are ignored. Prettier is opt-in (.prettierrc + format / format:check scripts), not gated: the codebase predates Prettier, so a --check gate would demand reformatting 110 files. Only this change's new files are formatted. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The repo's pnpm-workspace.yaml already uses pnpm-10+ syntax (allowBuilds), and the new esbuild `overrides` block lives there too — but pnpm 9 reads overrides from package.json, so a pnpm-9 CI runner saw no overrides while the lockfile recorded them (ERR_PNPM_LOCKFILE_CONFIG_MISMATCH on a frozen install). Align CI with the local pnpm (11.x); the lockfile is unchanged 9.0 format. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The pnpm-workspace `overrides` block forced audit to zero but only pnpm 10+ reads overrides from pnpm-workspace.yaml, while CI runs pnpm 9 — so a frozen install hit ERR_PNPM_LOCKFILE_CONFIG_MISMATCH. Bumping CI to pnpm 11 then failed because pnpm 11 needs Node >= 22.13 (node:sqlite) and CI is on Node 20. Rather than couple the toolchain to a newer pnpm/Node just for a dev-only advisory, drop the override and revert CI to pnpm 9. The meaningful fix stays: render-cli and reframe-video pin esbuild ^0.28.1, so the SHIPPED/used esbuild is patched. The single remaining low advisory (GHSA-g7r4-m6w7-qqqr) is now only tsx/vitest's transitive esbuild — dev tooling, never bundled, and esbuild's dev server is never used here. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
kiyeonjeon21
added a commit
that referenced
this pull request
Jun 22, 2026
Patch release: ships the esbuild ^0.28.1 bump. Dev-only test/lint tooling from #86 is not published.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes the three closeable gaps a project-evaluator pass flagged (it scored the repo 4.6/5). Items 4 and 5 (decompose the preview editor; document the
loadSceneFromCodeuntrusted-code boundary) are noted for a later pass.1. Pixel-level render correctness tests
Golden snapshots stop at the DisplayList and
frame.test.tsonly checks "valid PNG + differs over t", so a renderer-canvas bug (broken gradient mapping, black matte composite, thefill:"none"→black backdrop regression) shipped undetected.New
packages/render-cli/test/render-pixels.test.tsrenders a real frame through Chromium, decodes it to raw rgb with ffmpeg, and asserts semantic pixel properties over each node's region (located viasceneGeometry):Loose inequalities, so machine-independent and CI-runnable (unlike byte-exact pixel snapshots, which would have to be
skipIf(IN_CI)like the DisplayList goldens).2. esbuild bump
render-cliandreframe-videopin esbuild^0.28.1, so the shipped/used esbuild is patched against the low-severity dev-server advisoryGHSA-g7r4-m6w7-qqqr(esbuild's dev server is never used here). A workspaceoverridesto also force tsx/vitest's transitive esbuild was tried but reverted: only pnpm 10+ reads overrides frompnpm-workspace.yamlwhile CI runs pnpm 9, and pnpm 11 needs Node ≥22.13 (CI is Node 20). Not worth coupling the toolchain to a newer pnpm/Node for a dev-only advisory, so the single remaininglowfinding is tsx/vitest's transitive esbuild — dev tooling, never bundled.3. ESLint + Prettier
eslint:recommended+ typescript-eslint recommended +eslint-config-prettier) wired into CI aftertypecheck. Fixed every finding it surfaced (unused imports, an empty interface, two testanys, an irregular whitespace, a caught-error cause, a statement-position ternary) and documented the CLI dispatcher'sprocess.exitcases forno-fallthrough. No behavior changes..prettierrc+format/format:checkscripts), not gated in CI: the codebase predates Prettier, so a--checkgate would demand reformatting 110 files. Only this PR's new files are formatted.Verification
pnpm test— 421 pass (417 + 4 new); DisplayList goldens byte-identical (noevaluatechange).pnpm typecheck,pnpm lint— clean.pnpm audit— 1 low, dev-tooling only (tsx/vitest transitive esbuild); shipped deps patched.pnpm --filter reframe-video build— succeeds on esbuild 0.28.1.🤖 Generated with Claude Code